// testasync.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <future>
#include <chrono>
#include <string>
#include <format>

using namespace std::chrono_literals;

std::string async_task(int num)
{
    auto result = std::format("async task is processing with number: {}",std::to_string(num));
    std::this_thread::sleep_for(1000ms);
    return result;
}

void async_task2(int num)
{
    for (int i = 0; i < num; ++i)
    {
        auto result = std::format("async task is processing with number: {}", std::to_string(i));
        std::this_thread::sleep_for(1s);
        std::cout << "async task2 result: " << result << std::endl;
    }
}

int main()
{
    //auto future_result = std::async(std::launch::async, async_task, 10);
    auto future_result = std::async(std::launch::async, async_task2, 10);
    std::cout << "Main thread is doing something else..." << std::endl;
#if 1
    for (int i = 0; i < 10; ++i)
    {
        std::cout << "Main thread id: " << std::this_thread::get_id() << std::endl;
        std::this_thread::sleep_for(1s);
    }
#endif // 0

    future_result.get();
    //std::cout << "async task result: " << result << std::endl;
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
